package com.smart.community.region.controller;

import com.smart.community.commons.result.Result;
import com.smart.community.commons.utils.SecurityUtils;
import com.smart.community.feign.property.service.IPropertyCompanyCommunityFeign;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.constraints.NotNull;

/**
 * 物业社区关联控制器
 * 
 * 功能说明：
 * 1. 提供物业公司与社区关联的查询接口
 * 2. 支持根据社区ID获取物业公司ID
 * 3. 为前端提供直接的API调用接口
 * 4. 通过Feign客户端调用物业服务
 * 
 * 权限控制：
 * - 根据"智慧社区微服务架构总览.md"文档，Controller层不进行权限检查
 * - 权限检查由Service层处理，确保数据权限正确过滤
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 */
@Slf4j
@RestController
@RequestMapping("/region/property-community")
@RequiredArgsConstructor
@Validated
@Tag(name = "物业社区关联", description = "物业公司与社区关联查询接口")
public class PropertyCommunityController {

    private final IPropertyCompanyCommunityFeign propertyCompanyCommunityFeign;

    /**
     * 根据社区ID获取物业公司ID
     * 
     * @param communityId 社区ID
     * @return 物业公司ID，如果没有关联则返回null
     */
    @GetMapping("/property-company-by-community/{communityId}")
    @Operation(summary = "根据社区ID获取物业公司ID", description = "根据社区ID查询关联的物业公司ID")
    public Result<Long> getPropertyCompanyIdByCommunityId(
            @Parameter(description = "社区ID") @PathVariable("communityId") @NotNull Long communityId) throws Exception {
        Long userId = SecurityUtils.getCurrentUserId();
        log.info("根据社区ID获取物业公司ID，用户ID：{}，社区ID：{}", userId, communityId);
        
        try {
            // 通过Feign客户端调用物业服务获取物业公司ID
            Long propertyCompanyId = propertyCompanyCommunityFeign.getPropertyCompanyIdByCommunityId(communityId);
            
            if (propertyCompanyId != null) {
                log.info("根据社区ID获取物业公司ID成功，用户ID：{}，社区ID：{}，物业公司ID：{}", userId, communityId, propertyCompanyId);
                return Result.success("查询成功", propertyCompanyId);
            } else {
                log.info("社区ID：{} 未关联任何物业公司，用户ID：{}", communityId, userId);
                return Result.success("查询成功", null);
            }
        } catch (Exception e) {
            log.error("根据社区ID获取物业公司ID失败，用户ID：{}，社区ID：{}", userId, communityId, e);
            return Result.fail("查询失败：" + e.getMessage());
        }
    }
}
